import java.util.Scanner;

/**
 * Created by L.jp
 * Description:吞吞大作战
 * 时间限制： 3000MS
 * 内存限制： 589824KB
 * 题目描述：
 *       吞吞大作战是球球大作战的x.0版本，此时球球并不能通过击败其他球球壮大自己，而是获得得分，每一个球球都有一个能量值a_i，能量大的球球可以击败能量小的球球，当一个球球被击败后，击败者可以获得b_i得分。但是为了和谐，每个球球最多只能击败m个其他球球，然后就会强制进入结算环节。数据保证不会有两个球球具有相同的能量值。
 *
 *       请问每个球球最终最多得分多少。
 *
 *
 *
 * 输入描述
 * 输入第一行包含两个正整数n和m，表示球球的数量，和每个球球最多击败其他球球的数量。(1<=n,m<=1e5)
 *
 * 输入第二行包含n个非负整数，表示每个球球的能量值，每个数都不大于100000。
 *
 * 输入第三行包含n个正整数，表示每个球球的被击败后对手获得的得分，每个整数都不大于100000。
 *
 * 输出描述
 * 输出包含n个整数，表示每个球球最终最多获得的分数。
 *
 *
 * 样例输入
 * 5 3
 * 1 3 5 2 4
 * 1 2 3 4 5
 * 样例输出
 * 0 5 11 1 7
 * User: 86189
 * Date: 2023-04-23
 * Time: 21:10
 */
public class Main2 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        int m=scanner.nextInt();
        int[] energy=new int[n];
        for(int i=0;i<n;i++){
            energy[i]=scanner.nextInt();
        }
        int[] scores=new int[n];
        for(int i=0;i<n;i++){
            scores[i]=scanner.nextInt();
        }
        int[] maxScores=new int[n];
        for(int i=0;i<n;i++){
            int count=0;
            for(int j=0;j<n;j++){
                if(i!=j && energy[j]<energy[i]){
                    count++;
                    if(count>m){
                        break;
                    }
                    maxScores[i]+=scores[j];
                }
            }
        }
        for(int i=0;i<n;i++){
            System.out.println(maxScores[i]+" ");
        }
    }
}
